package com.ruoyi.yf.tool;/**
 * Created by XiaoYi  on 2020-03-24 15:29
 */

import cn.hutool.core.lang.Console;
import cn.hutool.json.JSONObject;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.StyleSet;
import com.ruoyi.yf.domain.Report;
import org.apache.poi.ss.usermodel.*;

import java.util.ArrayList;
import java.util.List;

/**
 * XiaoYi...
 * ba448c6b-3174-4086-b386-ca76ca5f391d
 */
public class GenerateReport {

//
//    //excel转照片流
//
//
//    //获取配置文件 并写入
//    public static ExcelWriter getJsonConfig(String template_path, JSONObject configObj, List<Report> reports, String[] selectNameSort) throws Exception {
//
//        if (template_path == null || template_path.isEmpty()) {
//            Console.log("[@path 模版地址为:{}]", template_path);
//            return null;
//        }
//        //获取文件
//        ExcelWriter writer = ExcelUtil.getWriter(template_path);
//
//        //获取配置json替换数据
//        JSONObject data = (JSONObject) configObj.get("data");
//
//        //获取配置json样式数据
//        JSONObject style = (JSONObject) configObj.get("style");
//
//
//        JSONObject config = (JSONObject) configObj.get("config");
//
//        //注意事项先插入行
//        //再按位置插入
////插入行
//        GenerateReport.printRows(writer, Integer.valueOf(config.get("passRows").toString()), reports, selectNameSort);
//
//
//        //循环样式
//        for (String key : style.keySet()) {
//            //样式值
//            Object value = style.get(key);
//            //写样式
//            strStyle(writer, key, value.toString());
//        }
//
//        //循环数据 所替换值
//        for (String key : data.keySet()) {
//            //获取 替换值
//            Object value = data.get(key);
//            //写入
//            writer.writeCellValue(key, value);
//        }
//
////        writer.flush(new File("/Users/xingyipeng/Desktop/report/true.xlsx"));
//        return writer;
//    }
//
//    //按行插入
//    public static void printRows(ExcelWriter writer, int start, List<Report> reports, String[] name) throws Exception {
//        //获取起始位置和结束位置；
//        writer.passRows(start);
//
//        //设置实线 边框 黑色；
//        StyleSet lineStyle = writer.getStyleSet();
//
//        lineStyle.setBorder(BorderStyle.THIN, IndexedColors.BLACK);
//
//        //写行集合
//        List<List<Object>> rows = new ArrayList<>();
//        //循环数据 获取行
//        for (Report report : reports) {
//            //获取行内容
//            List<Object> row = Report.reportRows(report, name);
//            System.out.println("row:" + row);
//            rows.add(row);
//        }
//        //写入所有行
//        writer.write(rows);
////        return writer;
//    }
//
//    /**
//     * 位置样式设置
//     *
//     * @param writer
//     * @param location      位置
//     * @param locationStyle 样式
//     */
//    public static void strStyle(ExcelWriter writer, String location, String locationStyle) {
//
//        CellStyle cellStyle = writer.getCellStyle();
//
//        //分解样式
//        String[] styles = locationStyle.split(";");
//        for (String style : styles) {
//
//            //分解样式属性名和属性值
//            String[] NameOrVal = style.split("=");
//            //属性名
//            String name = NameOrVal[0],
//                    //属性值
//                    val = NameOrVal[1].toUpperCase();
//            Console.log("[{} {} {}]", location, name, val);
//            switch (name) {
//                case "Alignment":
//                    /**
//                     * CENTER:水平对齐方式居中，这意味着文本在单元格中居中。
//                     * CENTER_SELECTION:水平对齐方式位于多个单元格的中心。
//                     * DISTRIBUTED:指示单元格内每行文本中的每个“单词”均沿单元格宽度均匀分布，左右边距齐平。
//                     * FILL:指示应在单元格的整个宽度上填充单元格的值。
//                     * GENERAL:水平对齐方式是一般对齐方式。
//                     * JUSTIFY:水平对齐是合理的（向左和向右齐平）。
//                     * LEFT:即使在从右到左模式下，水平对齐也是左对齐。
//                     * RIGHT:水平对齐方式是右对齐的，这意味着即使在从右到左的模式下，单元格内容也会在单元格的右边缘对齐。
//                     */
////                    cellStyle.setAlignment(HorizontalAlignment.valueOf(val));
////                    break;
////                case "BorderBottom"://设置底部边框类型
////                    cellStyle.setBorderBottom(BorderStyle.valueOf(val));
////                    break;
////                case "BorderLeft"://设置左部边框类型
////                    cellStyle.setBorderLeft(BorderStyle.valueOf(val));
////                    break;
////                case "BorderRight"://设置右部边框类型
////                    cellStyle.setBorderRight(BorderStyle.valueOf(val));
////                    break;
////                case "BorderTop"://设置顶部边框类型
////                    cellStyle.setBorderTop(BorderStyle.valueOf(val));
//                    break;
//                case "BottomBorderColor"://设置底部边框的颜色
//                    cellStyle.setBottomBorderColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "DataFormat"://设置数据类型
////                    cellStyle.setDataFormat(Short);
//                    break;
//                case "FillBackgroundColor":
//                    cellStyle.setFillBackgroundColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "FillForegroundColor":
//                    cellStyle.setFillForegroundColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "FillPattern":
////                    cellStyle.setFillPattern(FillPatternType.valueOf(val));
//                    break;
//                case "Font":
////                    cellStyle.setFont(font);
//                    break;
//                case "Hidden":
//                    cellStyle.setHidden(Boolean.valueOf(val));
//                    break;
//                case "Indention":
//                    cellStyle.setIndention(Short.valueOf(val));
//                    break;
//                case "LeftBorderColor"://设置左部边框的颜色
//                    cellStyle.setLeftBorderColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "Locked"://将使用此样式的单元格设置为锁定
//                    cellStyle.setLocked(Boolean.valueOf(val));
//                    break;
//                case "QuotePrefixed"://打开或关闭该样式的“ Quote Prefix”或“ 123 Prefix”，用于告诉Excel不应将看起来像数字或公式的内容视为打开。
////                    cellStyle.setQuotePrefixed(Boolean.valueOf(val));
//                    break;
//                case "RightBorderColor"://设置右部边框的颜色
//                    cellStyle.setRightBorderColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "Rotation"://设置单元格中的文本的旋转程度。
//                    cellStyle.setRotation(Short.valueOf(val));
//                    break;
//                case "ShrinkToFit"://控制单元格是否应自动调整大小;如果文本太长，可以缩小以适应
////                    cellStyle.setShrinkToFit(Boolean.valueOf(val));
//                    break;
//                case "TopBorderColor"://设置顶部边框的颜色
//                    cellStyle.setTopBorderColor(IndexedColors.valueOf(val).getIndex());
//                    break;
//                case "VerticalAlignment"://设置单元格的垂直对齐类型
////                    cellStyle.setVerticalAlignment(VerticalAlignment.valueOf(val));
//                    break;
//                case "WrapText"://设置是否应该换行。
//                    cellStyle.setWrapText(Boolean.valueOf(val));
//                    break;
//            }
//            writer.setStyle(cellStyle, location);
//        }
//    }
//
//
////    //获取配置文件 并写入
////    public static ExcelWriter getJsonConfig(String path, JSONObject configObj, String nu) {
////        //获取配置路径文件
////        ExcelWriter writer = ExcelUtil.getWriter(path);
////
////        //获取当前配置json
////        JSONObject head = (JSONObject) configObj.get("head");
////
////        StyleSet style = writer.getStyleSet();
////
////        CellStyle cellStyle = style.getCellStyleForDate();
////        cellStyle.setBorderLeft(BorderStyle.NONE);
////        cellStyle.setBorderTop(BorderStyle.NONE);
////        cellStyle.setBorderRight(BorderStyle.NONE);
////        cellStyle.setBorderBottom(BorderStyle.THIN);
////
////
////        //获取当前配置所需替换单元格信息
////        for (String key : head.keySet()) {
////            //获取 替换值、样式
////            Object value = head.get(key);
////
////            //运算后的新值
////            Map<String, String> result = regexConfig(value.toString());
////
//////            String style = result.get("style");
//////            System.out.println("style:"+style);
////
////            //设置样式
//////            writer = setStyle(writer, style, key);
////
////
////            String val = result.get("val");
//////            System.out.println("val:"+val);
////            //写入
////            writer.setStyle(cellStyle, key).writeCellValue(key, val);
////
////        }
////        return writer;
////    }
//
//
////    //获取替换值的运算
////    public static Map<String, String> regexConfig(String val) {
////        Map<String, String> result = new HashMap<>();
////        String[] split = val.split("(?=$)|(?=#)");
////        for (int i = 0; i < split.length; i++) {
////            if (split[i].contains("#") && !split[i].isEmpty())
////                result.put("style", split[i].replaceAll("^(\\#\\<)|(\\>)", ""));
////            else
////                result.put("val", split[i].replaceAll("^(\\$\\<)|(\\>)", ""));
////        }
////        return result;
////    }
//
////    //设置表格样式
////    public static ExcelWriter setStyle(ExcelWriter writer, String style, String location) {
////        if (style != null) {
//////            System.out.println(style);
////            //设置单元格 无 左上右边框
////            CellStyle cellStyle = writer.getCellStyle();
////
////
////            String[] split = style.split(",");
////            for (int i = 0; i < split.length; i++) {
////                if (split[i].equals("l"))
////                    cellStyle.setBorderLeft(BorderStyle.NONE);
////                if (split[i].equals("r"))
////                    cellStyle.setBorderRight(BorderStyle.NONE);
////                if (split[i].equals("t"))
////                    cellStyle.setBorderTop(BorderStyle.NONE);
////                if (split[i].equals("b"))
////                    cellStyle.setBorderBottom(BorderStyle.NONE);
////
////                writer.setStyle(cellStyle, location);
////            }
////        }
////        return writer;
////    }

}
